package com.hyper_yang._05_juc.chap09;

import java.util.concurrent.atomic.AtomicInteger;

// CAS: compare and Set 比较并交换
public class AtomicDemo {

    public static void main(String[] args) {

        //乐观锁原理：比较和交换
        AtomicInteger i = new AtomicInteger(1);

        //比较当前值initialValue 1 和预期值expectedValue 1，相等，则将当前值换为新值
        System.out.println("第一次更新：" + i.compareAndSet(1, 200)); //是否修改成功,打印boolean值
        System.out.println("第一次更新后i的值：" + i.get()); //获取修改后的值打印。

        System.out.println("第二次更新：" + i.compareAndSet(1, 300));
        System.out.println("第二次更新后i的值：" + i.get());

        System.out.println("第三次更新：" + i.compareAndSet(200, 300));
        System.out.println("第三次更新后i的值：" + i.get());

    }
}
/*
do {
    v = getIntVolatile(o, offset); // 获取 期望版本
} while (!weakCompareAndSetInt(o, offset, v, v + delta)); // 进行比较并交换 成功则写入 失败则更新期望值
 */